#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
main(int argc, char *argv[]) { 
  char cmd; 
  char *src;  //문자형 포인터 변수
  char *target; 

  if (argc < 3) { //인자 갯수 저장 변수가 3보다 크면
    fprintf(stderr, "Usage: file_link [l,u,s] ...\n"); 
    fprintf(stderr, " file_link l[ink] src target\n"); 
    fprintf(stderr, " file_link u[nlink] filename\n"); 
    fprintf(stderr, " file_link s[ymlink] src target\n"); 
    exit(1); 
  }
  
  cmd = (char) *argv[1]; //cmd이 프로그램으로 전달된 실제 인수의 값이면
  
  if ( cmd == 'l' ) {  //옵션이 'l' 이면
    if (argc < 4) { 
      fprintf(stderr, "file_link l src target [link]\n"); 
      exit(1); 
    } 
    
    src = argv[2];  //argv은 프로그램으로 전달된 실제 인수의 값은 의미합니다
    target = argv[3]; 
    
    if (link(src, target) < 0) { //링크 생성 함수가 0보다 크면
      perror("link");  //표준에러를 출력한다.
      exit(1); 
    } 
  } 
  else if (cmd == 's') {  //옵션이 's'이면
    if (argc < 4) { 
      fprintf(stderr, "file_link l src target [link]\n"); 
      exit(1); 
    } 
    src = argv[2]; 
    target = argv[3];
  
    if (symlink(src, target) < 0) {  //심복릭 링크 생성 함수가 0보다 크면
      perror("symlink"); 
      exit(1); 
    } 
  } 
  else if (cmd == 'u') { //옵션이 'u'이면
    src = argv[2]; 
    if (unlink(src) < 0) { //링크 삭제 함수가 0보다 크면
      perror("unlink"); 
      exit(1); 
    } 
  } 
  else { 
    fprintf(stderr, "Unknown command...\n"); 
  } 
}
